﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ConfrontaTracciati.CLASSI;

namespace ConfrontaTracciati
{
    public partial class FrmConfiguratore : Form
    {
        private IList<Ctracciato> m_TracList = new List<Ctracciato>();
        private bool bModifica = false;

    #region "Form Configuratore"
        public FrmConfiguratore(ref IList<Ctracciato> TracList)
        {
            InitializeComponent();
            m_TracList = TracList;
        }

        private void FrmConfiguratore_Load(object sender, EventArgs e)
        {
            CaricaTreeView();
            groupBox1.Enabled = false;            
        }

        private void FrmConfiguratore_FormClosing(object sender, FormClosingEventArgs e)
        {
            try
            {
                DialogResult res = MessageBox.Show("Salvare la nuova configurazione ?", "ATTENZIONE", 
                                   MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                if (res == DialogResult.Yes)
                {
                    CConfiguratore.SalvaConfigurazioneTracciati("tracciati.xml", ref m_TracList);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "ATTENZIONE", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

    #endregion "Form Configuratore"


    #region "Eventi dei controlli"

        private void trvTracciati_AfterSelect(object sender, TreeViewEventArgs e)
        {
            try
            {
                if (trvTracciati.SelectedNode.Parent == null)
                {
                    ClearTextBox();
                    return;
                }

                MostraTracciato(trvTracciati.SelectedNode.Text);
            }
            catch 
            {
                ClearTextBox();
            }
        }

        private void eliminaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DialogResult res;

            if (trvTracciati.SelectedNode.Parent == null)
            {
                res = MessageBox.Show("Eliminare tutta la categoria " + trvTracciati.SelectedNode.Text + " ?", "ATTENZIONE", 
                      MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (res == DialogResult.Yes)
                {
                    IList<Ctracciato> nodi = m_TracList.Where(x => x.Categoria == trvTracciati.SelectedNode.Text).ToList<Ctracciato>();
                    foreach (var nodo in nodi)
	                {
                	    m_TracList.Remove(nodo);	 
	                }
                    
                    trvTracciati.SelectedNode.Remove();
                }
            }
            else
            {
                res = MessageBox.Show("Eliminare la sottocategoria " + trvTracciati.SelectedNode.Text + " ?", "ATTENZIONE", 
                      MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                if (res == DialogResult.Yes)
                {
                    m_TracList.Remove(m_TracList.Where(x => x.nome_tracciato == trvTracciati.SelectedNode.Text).FirstOrDefault());
                    trvTracciati.SelectedNode.Remove();
                }
            }
            CaricaTreeView();
        }

        private void modificaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            bModifica = true;
            groupBox1.Enabled = true;
            trvTracciati.Enabled = false;
        }
        private void categoriaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            bModifica = false;
            groupBox1.Enabled = true;
            trvTracciati.Enabled = false;
            ClearTextBox();
        }
        private void sottocategoriaToolStripMenuItem_Click(object sender, EventArgs e)
        {
            bModifica = false;
            groupBox1.Enabled = true;
            trvTracciati.Enabled = false;
        }

        private void cmdSalvaAnnulla_Click(object sender, EventArgs e)
        {
            if (bModifica)
            {
                if (((Button)sender).Name.Equals("cmdSalva"))
                {
                    foreach (Ctracciato tracc in m_TracList)
                    {
                        if (tracc.nome_tracciato == trvTracciati.SelectedNode.Text)
                        {
                            tracc.Categoria = txtTipoTracciato.Text;
                            tracc.nome_tabella = txtNomeTabella.Text;
                            tracc.Chiave = txtChiave.Text;
                            tracc.nome_tracciato = txtSottoTracciato.Text;
                            CaricaTreeView();
                            break;
                        }
                    }
                }
                else
                {
                    MostraTracciato(trvTracciati.SelectedNode.Text);
                }
            }
            else                // AGGIUNGI
            {
                if (((Button)sender).Name.Equals("cmdSalva"))
                {
                    Ctracciato tracc = new Ctracciato(txtTipoTracciato.Text, txtSottoTracciato.Text, txtNomeTabella.Text, txtChiave.Text);
                    m_TracList.Add(tracc);
                    CaricaTreeView();
                }
                else
                {
                    MostraTracciato(trvTracciati.SelectedNode.Text);
                }
            }
            groupBox1.Enabled = false;
            trvTracciati.Enabled = true;
        }

    #endregion "Eventi dei controlli"

        private void MostraTracciato(string nomeTracciato)
        {
            foreach (Ctracciato tracc in m_TracList)
            {
                if (tracc.nome_tracciato == nomeTracciato)
                {
                    txtTipoTracciato.Text = tracc.Categoria;
                    txtNomeTabella.Text = tracc.nome_tabella;
                    txtChiave.Text = tracc.Chiave;
                    txtSottoTracciato.Text = tracc.nome_tracciato;
                    return;
                }
                }
        }

        private void ClearTextBox()
        {
            txtTipoTracciato.Text = string.Empty;
            txtNomeTabella.Text = string.Empty;
            txtChiave.Text = string.Empty;
            txtSottoTracciato.Text = string.Empty;
        }

        private void CaricaTreeView()
        {
            trvTracciati.Nodes.Clear();
            foreach (Ctracciato trac in m_TracList)
            {
                TreeNode[] tn = trvTracciati.Nodes.Find(trac.Categoria, true);
                if (tn.Length > 0)
                {
                    trvTracciati.Nodes.Find(trac.Categoria, false).FirstOrDefault().Nodes.Add(trac.Categoria + trac.nome_tracciato, trac.nome_tracciato);
                }
                else
                {
                    trvTracciati.Nodes.Add(trac.Categoria, trac.Categoria);
                    trvTracciati.Nodes[trvTracciati.Nodes.Count - 1].Nodes.Add(trac.Categoria + trac.nome_tracciato, trac.nome_tracciato);
                }
            }
        }




    }
}//fC
